<?
class RecordsetMemory
	{	
		var $aFields= array();
		var $aData;
		var $nRowIndex =0;
		//
		function RecordsetMemory( $aData) 
		{
			$this->aData = $aData;
		}
		function addRow ( $aRow )
		{
			$this->aData[] = $aRow;
		}
		function getKeyArray() 
		{
			$aReturn = array();
			$aRow = array();
			
			foreach ( $this->aData as $aRow )
			{
				// Si es solo Codigo y Descripcion
				if ( count($aRow) == 2 ) 
				{
					$cIndex =  "" . $aRow[0];
					$aReturn[ $cIndex ] = $aRow[1];
				} else 
				{
					for ( $nRow = 0; $nRow < count($aRow) ; $nRow++ )
					{
						$aReturn[$aRow[0]][] = $aRow[$nRow];
					}
				}
			}
			return $aReturn;
		}
		function getMatrix()
		{
			return $this->aData;
		}
		//
		function open( ) 
		{
			return true;
		}
		// 
		function close ()
			{
			  $this->aData = array();
			}
		//
		function moveTo( $nRow = -1) 
		{
			$bReturn = false;
			if ( $this->__goTo( $nRow ) )
			{
				$this->aFields = $this->aData[$this->nRowIndex-1];
				$bReturn = true;
			}
			return $bReturn;
		}
		//
		function __goTo( $nRow = -1) 
		{
			$bReturn = false;
			$nRowAbsoluta = ( $nRow <= -1 ) ? $this->nRowIndex + 1 : $nRow;
			if ( $nRowAbsoluta <= count( $this->aData) )
			{
				$this->nRowIndex = $nRowAbsoluta;
				$bReturn = true;
			} 
			return $bReturn;
		}
		//
		function moveNext( $bAsociativo = 1) 
		{			
			return $this->moveTo($this->nRowIndex + 1);
		}
		//
		function getHeaders( $cDelimitadorCampo = "'", $cSeparadorCampo = "," , $cSeparadorRegistros = "\n" ) 
		{
			// Se mueve al Primer Registro y arma una cadena con los nombres de los campos separados por el delimitador
			$this->moveTo(0);
			$aKeys 	  = array_keys( $this->aFields  );
			$nqCampos = count($aKeys);
			for( $nCampo = 1; $nCampo < $nqCampos; $nCampo +=2 ) 
			{
				$cData .=  $cDelimitadorCampo . $aKeys[$nCampo] . $cDelimitadorCampo . $cSeparadorCampo;
			}			
			if ( $cData  != "" ) 
			{
				$cData =  substr( $cData , 0, strlen($cData) - strlen($cSeparadorCampo) );
			}
			// Devuelve la cadena
			return $cData . $cSeparadorRegistros;
		}
		// Devuelve los Campos del Actual registro separados por Comas
		function getFields( $cDelimitadorCampo = "'", $cSeparadorCampo = "," ) 
		{
			// Por cada Campo del Registro Actual, arma una cadena separada por los Delimitadores
			$cLinea = "";
			
			foreach( $this->aFields as $cField ){
				$cLinea .=  $cDelimitadorCampo . $cField . $cDelimitadorCampo . $cSeparadorCampo;
			}
			if ( $cLinea != "" )
			{
				$cLinea = substr( $cLinea , 0, strlen($cLinea) - strlen($cSeparador) );
			}
			// Devuelve la cadena
			return $cLinea ;
		}
		//
		function saveQuery( $cArchivo , $cDelimitadorCampo = "'", $cSeparadorCampo = "," ) 
		{
			$fd = fopen($cArchivo , "w");
			while ( $this->moveNext() ) 
			{
				fwrite($fd, $this->getFields( $cDelimitadorCampo, $cSeparadorCampo ) );
			}
			fclose($fd);
		}
		//
		function getQuery( $cDelimitadorCampo = "'", $cSeparadorCampo = "," , $cSeparadorRegistros = "\n" ) 
		{
			// Por cada Registro del Query arma una cadena con los valores separados por los delimitadores
			$cData = "";
			$nPosicion = 0;		
			while ( $this->moveTo($nPosicion) ) 
			{
				$cData .= $this->getFields( $cDelimitadorCampo, $cSeparadorCampo ) . $cSeparadorRegistros ;
				$nPosicion++;
			}
			// Devuelve la cadena
			return $cData;
		}
		//
		function count() 
		{
			return count( $this->aData);
		}
	}
?>